#include "timer_1_motor.h"

/**
 * PB8:复用输出,AF1
 *
 */
void timer_1_motor_motor_config(void)
{
    rcu_periph_clock_enable(RCU_GPIOB);
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
    gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_8);

    // 设置高电平,默认导通
    gpio_bit_set(GPIOB, GPIO_PIN_8);
}

void timer_1_motor_timer_1_config(void)
{
    // 配置timer1
    rcu_periph_clock_enable(RCU_TIMER1);
    // 倍频到168Mhz
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
    // 复位
    timer_deinit(TIMER1);
    // 参数

    timer_parameter_struct tps;
    timer_struct_para_init(&tps);
    // 分频系数
    tps.prescaler = 2800; // 168Mhz/2800 = 60000hz
    // 周期
    tps.period = 600 - 1; // 60000hz / (600-1 +1) = 100hz,即每秒100个周期
    // 初始化定时器
    timer_init(TIMER1, &tps);

    // 通道配置
    timer_oc_parameter_struct ocpara;
    timer_channel_output_struct_para_init(&ocpara);
    // 只有高级定时器才有极性
    ocpara.outputstate = (uint16_t)TIMER_CCX_ENABLE;
    // 使用通道1
    timer_channel_output_config(TIMER1, TIMER_CH_0, &ocpara);

    // 通道输出模式
    timer_channel_output_mode_config(TIMER1, TIMER_CH_0, TIMER_OC_MODE_PWM0);

    // ccr ,初始值设置为0,电机不转
    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, 0);

    // 开启定时器
    timer_enable(TIMER1);
}
/**
 * PB8:复用输出,AF1
 * 通用定时器Timer1 通道0
 */
void timer_1_motor_config(void)
{
    timer_1_motor_motor_config();
    timer_1_motor_timer_1_config();
}

void timer_1_motor_set(float duty)
{
    uint32_t ccr = duty * 600 - 1;

    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, ccr);
}
